import store from '../store/index.js';
import user from '../core/user.js';
import {
	clearStorage
} from '../core/cache.js';


const jump = function(data) {
	if (!data.open_type && !data.params && !data.page_url) return;

	let open_type = data.open_type;
	let params = data.params;
	let page_url = data.page_url;

	if (!Array.isArray(params) && Object.prototype.toString.call(params) === "[object String]" && params) {
		params = JSON.parse(params);
	}

	switch (open_type) {
		case 'reLaunch':
			uni.reLaunch({
				url: params[0].value,
			});
			break;

		case 'redirect':
			uni.redirectTo({
				url: params[0].value,
			});
			break;

		case 'navigate':
			let new_page_url = page_url.split('?')[0];
			let options = `?`;

			for (let i = 0; i < params.length; i++) {
				options += `${params[i].key}=${params[i].value}&`;
			}
			new_page_url += options.slice(0, options.length - 1);

			if (options === '?') {
				new_page_url = page_url;
			}
			/* #ifdef MP-BAIDU || MP-TOUTIAO */
			if (page_url.split('?')[0] !== '/plugins/step/index/index') {
				uni.navigateTo({
					url: new_page_url
				});
			}
			/* #endif */

			/* #ifdef MP-WEIXIN || MP-ALIPAY */
			uni.navigateTo({
				url: new_page_url
			});
			/* #endif */

			break;

		case 'app_admin':
			if (store.state.user.info.identity.is_admin == 1) {
				uni.navigateTo({
					url: data.url,
				});
			}
			break;

		case 'back':
			uni.navigateBack({});
			break;

		case 'tel':
			uni.makePhoneCall({
				phoneNumber: params[0].value,
			});
			break;

		case 'web':
			uni.navigateTo({
				url: `${page_url.split('?')[0]}?url=${encodeURIComponent(params[0].value)}`
			});
			break;

		case 'app':
			let originalPath = '';
			for (let i = 0; i < params.length; i++) {
				originalPath += `${params[i].key}=${params[i].value}&`;
			}
			if (typeof originalPath !== 'string') return;
			let groups = originalPath.split('&');
			let obj = {};
			for (let i in groups) {
				if (typeof groups[i] !== 'string') continue;
				if (!groups[i].length) continue;
				let kvs = groups[i].split('=');
				if (kvs.length !== 2) {
					let s = '';
					for (let i = 1; i < kvs.length; i++) {
						if (i + 1 === kvs.length) {
							continue;
						} else {
							s += `${kvs[i]}=${kvs[i+1]}`
						}
					}
					obj[kvs[0]] = s;
				} else {
					obj[kvs[0]] = kvs[1];
				}
			}
			let new_params = obj;
			let appId = '';
			let path = '';
			// #ifdef MP-WEIXIN
			appId = new_params.app_id || '';
			path = new_params.path || '';
			// #endif
			// #ifdef MP-ALIPAY
			appId = new_params.ali_app_id || '';
			path = new_params.ali_path || '';
			// #endif
			// #ifdef MP-TOUTIAO
			appId = new_params.tt_app_id || '';
			path = new_params.tt_path || '';
			// #endif
			// #ifdef MP-BAIDU
			appId = new_params.bd_app_key || '';
			path = new_params.bd_path || '';
			// #endif
			uni.navigateToMiniProgram({
				appId: appId,
				path: path
			});
			break;

		case 'clear_cache':
			uni.showModal({
				title: '提示',
				content: '确认清理缓存？',
				cancelText: '取消',
				confirmText: '确认',
				success: (e) => {
					if (e.confirm) {
						uni.showLoading({
							title: '清理缓存...',
						});
						clearStorage();
						if (user && store && store.state.user.accessToken) {
							user.loginByToken(store.state.user.accessToken);
						}
						store.dispatch('mallConfig/actionResetConfig');
						uni.hideLoading();
						uni.showToast({
							title: '清理完成',
							duration: 1000,
						});
					}
				},
			});
			break;

		case 'map':
			// uni.openLocation({
			//     latitude: Number(this.latitude),
			//     longitude: Number(this.longitude),
			//     name: this.address,
			//     address: this.address,
			//     success: function () {
			//     },
			//     fail: function () {
			//     }
			// });
			break;
			// case 'share':
	}
};

export default jump;
